#ifndef _DATABASE_SPELLEFFECT_H
#define _DATABASE_SPELLEFFECT_H

#include "Database_Common.h"
#include "SpellAnimations.h"
#include "Spells.h"

typedef unsigned int Spell_Animation_Argument_Type;
#define SAAT_NOTHING		0
#define SAAT_INTEGER		1
#define SAAT_CHARACTER		2
#define SAAT_EFFECT			3
#define SAAT_MODEL			4
#define SAAT_SOUND			5
#define SAAT_ANIMATION		6
#define SAAT_FADE_INOUT		7

typedef unsigned int Enemy_Animation_Argument_Type;
#define EAAT_INTEGER		0
#define EAAT_COORDINATE		1
#define EAAT_ANIMATION		2
#define EAAT_TEXT			3
#define EAAT_SPELL_ANIM		4
#define EAAT_TIME			5
#define EAAT_SOUND			6

struct SortedChoiceItemModel {
	unsigned int id;
	wxString label;
	Spell_Target_Type target_type;
	Spell_Target_Amount target_amount;
	uint8_t bug_rate;
};

#define SPELL_MODEL_ATTACK_ID 100
#define SPELL_MODEL_ATTACK_AMOUNT 19
#define SPELL_MODEL_WEAPON_ID 313
#define SPELL_MODEL_WEAPON_AMOUNT 64
static SortedChoiceItemModel HADES_STRING_SPELL_MODEL[] = {
	{ 0,   L"Fire (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 70,  L"Fire (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 2,   L"Fira (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 71,  L"Fira (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 7,   L"Firaga (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 72,  L"Firaga (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 26,  L"Sleep (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 78,  L"Sleep (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 6,   L"Blizzard (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 62,  L"Blizzard (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 4,   L"Blizzara (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 77,  L"Blizzara (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 151, L"Blizzaga (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 152, L"Blizzaga (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 126, L"Slow", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 3,   L"Thunder (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 66,  L"Thunder (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 5,   L"Thundera (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 73,  L"Thundara (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 24,  L"Thundaga (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 133, L"Thundaga (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 149, L"Stop", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 180, L"Aero", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 502, L"Aera-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 205, L"Aera-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 284, L"Aeraga", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 21,  L"Poison (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 202, L"Poison (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 93,  L"Bio (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 120, L"Bio (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 57,  L"Osmose", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 132, L"Drain", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 98,  L"Demi (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 99,  L"Demi (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 56,  L"Comet", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 94,  L"Death", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 153, L"Break", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 22,  L"Water (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 95,  L"Water (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 427, L"Waterga", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 134, L"Meteor (Success)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 143, L"Meteor (Fail)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 125, L"Flare", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 436, L"Flare Star", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 308, L"Doomsday", SPELL_TARGET_TYPE_EVERYONE, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 199, L"Focus", SPELL_TARGET_TYPE_SELF, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 8,   L"Cure (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 9,   L"Cure (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 141, L"Cura (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 162, L"Cura (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 142, L"Curaga (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 144, L"Curaga (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 32,  L"Regen", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 17,  L"Life", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 15,  L"Full Life", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 131, L"Scan", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 12,  L"Panacea", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 13,  L"Stona", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 11,  L"Esuna", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 63,  L"Shell", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 123, L"Protect", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 89,  L"Haste", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 42,  L"Silence (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 127, L"Silence (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 25,  L"Mini (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 124, L"Mini (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 79,  L"Reflect", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 96,  L"Confuse (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 97,  L"Confuse (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 14,  L"Berserk (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 140, L"Berserk (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 158, L"Blind (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 157, L"Blind (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 27,  L"Float (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 76,  L"Float (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 128, L"Dispel", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 201, L"Jewel", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 90,  L"Might", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 87,  L"Holy", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 407, L"Shiva (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 38,  L"Shiva (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 445, L"Ifrit (Short)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 276, L"Ifrit (Full)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 415, L"Ramuh (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 186, L"Ramuh (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 446, L"Atomos (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 184, L"Atomos (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 424, L"Odin (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 261, L"Odin (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 406, L"Leviathan (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 179, L"Leviathan (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 405, L"Bahamut (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 227, L"Bahamut (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 447, L"Ark (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 381, L"Ark (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 504, L"Carbuncle-Ruby (Short)", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 177, L"Carbuncle-Ruby (Full)", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 505, L"Carbuncle-Pearl (Short)", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 493, L"Carbuncle-Pearl (Full)", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 506, L"Carbuncle-Emerald (Short)", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 494, L"Carbuncle-Emerald (Full)", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 507, L"Carbuncle-Diamond (Short)", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 495, L"Carbuncle-Diamond (Full)", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 508, L"Fenrir-Earth (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 210, L"Fenrir-Earth (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 509, L"Fenrir-Wind (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 226, L"Fenrir-Wind (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 510, L"Phoenix (Short)", SPELL_TARGET_TYPE_EVERYONE, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 211, L"Phoenix (Full)", SPELL_TARGET_TYPE_EVERYONE, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 225, L"Phoenix-Rebirth Flame", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 378, L"Madeen (Short)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 251, L"Madeen (Full)", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 254, L"Eat", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 255, L"Cook", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 74,  L"Goblin Punch", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 154, L"LV5 Death", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 129, L"LV4 Holy", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 392, L"LV3 Def-less", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 236, L"Doom", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 237, L"Roulette", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 28,  L"Aqua Breath", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 81,  L"Mighty Guard", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 88,  L"Matra Magic", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 44,  L"Bad Breath", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 82,  L"Limit Glove", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 30,  L"1000 Needles", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 297, L"Pumpkin Head", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 501, L"Night", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 178, L"Twister", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 390, L"Earth Shake", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 45,  L"Angel's Snack", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 228, L"Frog Drop", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 41,  L"White Wind", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 500, L"Vanish", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 150, L"Frost", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 187, L"Mustard Bomb", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 130, L"Magic Hammer", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 138, L"Auto-Life", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 148, L"Trine", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 188, L"Darkside-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 409, L"Darkside-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 189, L"Minus Strike-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 410, L"Minus Strike-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 190, L"Iai Strike-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 411, L"Iai Strike-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 208, L"Power Break", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 92,  L"Armor Break", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 209, L"Mental Break", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 46,  L"Magic Break", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 398, L"Charge!", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 191, L"Thunder Slash-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 412, L"Thunder Slash-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 457, L"Thunder Slash-3", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 207, L"Stock Break-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 414, L"Stock Break-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 459, L"Stock Break-3", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 397, L"Climhazzard-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 417, L"Climhazzard-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 443, L"Climhazzard-3", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 192, L"Shock-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 413, L"Shock-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 458, L"Shock-3", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 212, L"Fire Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 213, L"Fira Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 214, L"Firaga Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 215, L"Thunder Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 216, L"Thundara Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 217, L"Thundaga Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 218, L"Blizzard Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 219, L"Blizzara Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 220, L"Blizzaga Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 221, L"Bio Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 222, L"Water Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 223, L"Flare Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 224, L"Doomsday Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 200, L"Steal-Main", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 19,  L"Steal-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 20,  L"Steal-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 119, L"Steal-3", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 273, L"Steal-4", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 249, L"Flee-Skill", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 250, L"Detect", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 399, L"What's That!?", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 229, L"Soul Blade", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 233, L"Annoy", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 234, L"Sacrifice", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 312, L"Lucky Seven", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 231, L"Thievery", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 241, L"Free Energy", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 242, L"Tidal Flame", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 243, L"Scoop Art", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 244, L"Shift Break", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 245, L"Stellar Circle 5", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 246, L"Meo Twister", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 247, L"Solution 9", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 248, L"Grand Lethal", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 393, L"Jump", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 1 },
	{ 388, L"Spear", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 389, L"Spear-Trance", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 401, L"Lancer", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 168, L"Reis' Wind", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 296, L"Dragon Breath", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 83,  L"White Draw", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 61,  L"Luna", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 491, L"Six Dragons", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 387, L"Cherry Blossom", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 490, L"Dragon's Crest", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 265, L"Throw-Racket", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 266, L"Throw-Thief Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 267, L"Throw-Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 268, L"Throw-Spear", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 269, L"Throw-Claw", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 270, L"Throw-Rod", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 271, L"Throw-Fork", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 272, L"Throw-Dagger", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 277, L"Throw-Disc", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 85,  L"Chakra (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 86,  L"Chakra (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 135, L"Spare Change (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 136, L"Spare Change (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 193, L"No Mercy (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 194, L"No Mercy (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 197, L"Aura (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 198, L"Aura (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 195, L"Curse (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 196, L"Curse (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 137, L"Revive (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 421, L"Revive (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 121, L"Demi Shock (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 122, L"Demi Shock (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 385, L"Countdown (Single)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 386, L"Countdown (Multi)", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 278, L"Ether", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 40,  L"Elixir", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 280, L"Echo Screen", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 279, L"Eye Drops", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 281, L"Magic Tag", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 282, L"Vaccine", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 283, L"Annoyntment", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 287, L"Dark Matter", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 289, L"Gysahl Greens", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 288, L"Dead Pepper", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 290, L"Tent", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 292, L"Ore", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 159, L"Pyro", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 293, L"Poly", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 377, L"Medeo", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	
	{ 10,  L"Poison", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 383, L"Poison", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 3 },
	{ 55,  L"Blind", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 16,  L"Instant", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 1 },
	{ 18,  L"Smoke", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 1 },
	{ 23,  L"Snowflakes", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 31,  L"Explosion", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 33,  L"Greater Smoke", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 1 },
	{ 35,  L"Psychokinesis", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 47,  L"Flame", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 48,  L"Pollen", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 49,  L"Glare", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 50,  L"Glowing Eyes", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 51,  L"Snort", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 52,  L"Cold Breath", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 53,  L"Oil Shot", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 54,  L"Inferno", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 58,  L"Earthquake", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 59,  L"Trouble Juice", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 60,  L"Rainbow Storm", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 64,  L"Bubbles", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 65,  L"Energy Blast", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 67,  L"Ink", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 68,  L"Ultra Sound Wave", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 75,  L"Sandstorm", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 69,  L"Aerial Slash", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 29,  L"Aerial Slash-1", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 36,  L"Aerial Slash-2", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 43,  L"Aerial Slash-3", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 139, L"Aerial Slash-4", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 145, L"Entice", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 146, L"Hypnotize", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 147, L"Cannon", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 155, L"Lava Gun x6", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 160, L"String", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 161, L"Blaster", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 163, L"Electrocute", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 164, L"Buzz", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 165, L"Pollen", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 166, L"Firestorm", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 156, L"Starburst", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 169, L"Lightning", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 170, L"Snowstorm", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 171, L"Maelstrom", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 172, L"Bio Breath", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 173, L"Aero Breath", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 174, L"Venom Breath", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 175, L"Zombie Breath", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 176, L"Autumn Leaves", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 181, L"Rainbow Wind", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 182, L"Scorch", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 183, L"Heavy", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 185, L"Sandstorm", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 203, L"Nanoflare", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 204, L"Meteorite", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 206, L"Gradual Petrify", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 230, L"Twinkle", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 235, L"Psychokinesis", SPELL_TARGET_TYPE_ALLY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 238, L"Mirror", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 239, L"Red Clipper", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 240, L"Sand Breath", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 256, L"Solution", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 258, L"Rise", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 259, L"Mist", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 260, L"Soul Out", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 262, L"Slime", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 274, L"Devour", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 275, L"Light Shell", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 285, L"Forcefield", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 291, L"Raining Swords", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 294, L"Boomerang", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 295, L"Shimmer", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 298, L"Jet Fire", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 299, L"Photon", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 300, L"Magnitude 8", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 301, L"Sinkhole", SPELL_TARGET_TYPE_SELF, SPELL_TARGET_AMOUNT_ZERO, 2 },
	{ 303, L"Paper Storm", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 304, L"Propeller Wind", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 305, L"Accumulate", SPELL_TARGET_TYPE_SELF, SPELL_TARGET_AMOUNT_ZERO, 0 },
	{ 306, L"Green Smoke", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 307, L"Red Smoke", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 309, L"Curse", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 310, L"Absorb", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 311, L"Flame", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 382, L"Chestnut", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 391, L"Fire Blades", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 395, L"Rippler", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 396, L"Rise", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 400, L"Smoke", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 402, L"Smoke (Self)", SPELL_TARGET_TYPE_SELF, SPELL_TARGET_AMOUNT_ZERO, 0 },
	{ 403, L"Atomic Ray", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 404, L"Shockwave", SPELL_TARGET_TYPE_ENEMY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 408, L"Tidal Waves", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 416, L"Flaming Sword", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 419, L"Yellow Shot", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 167, L"Water Gun", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 422, L"Water Gun x3", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 423, L"Electricity", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 286, L"Virus Fly", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 425, L"Virus Powder", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 428, L"Virus Crunch", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 429, L"Green Sparkle", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 1 },
	{ 433, L"Dust Storm", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 434, L"Lapis Laser", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 498, L"Grand Cross", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 499, L"Neutron Ring", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 0 },
	{ 503, L"Blue Shockwave", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 486, L"Ragtime True", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 487, L"Ragtime False", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 437, L"Dummy", SPELL_TARGET_TYPE_SELF, SPELL_TARGET_AMOUNT_ZERO, 0 },
	{ 100, L"[Attack-1...]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 313, L"[Weapon Attack-1...]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 253, L"[Prepare Attack]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 511, L"[Channel]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 252, L"[Flee]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 2 },
	{ 257, L"[Trance-Activate]", SPELL_TARGET_TYPE_SELF, SPELL_TARGET_AMOUNT_ZERO, 0 },
	{ 489, L"[Trance-End]", SPELL_TARGET_TYPE_SELF, SPELL_TARGET_AMOUNT_ZERO, 0 },
	{ 394, L"[Trance-Kuja]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 2 },
	{ 232, L"[Teleport]", SPELL_TARGET_TYPE_SELF, SPELL_TARGET_AMOUNT_ONE, 3 },
	{ 302, L"[Disappear]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 2 },
	{ 1,   L"[Special Curaga]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 2 },
	{ 418, L"[Steiner VS Blank]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 2 },
	{ 460, L"[Sealion-Engage]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 1 },
	{ 441, L"[Gizamaluke-Engage]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 2 },
	{ 440, L"[Gizamaluke-Death]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 2 },
	{ 431, L"[Valia Pira-Death]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 34,  L"[Kraken's Arm-Death]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ONE, 0 },
	{ 384, L"[Ultima-Memoria]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 492, L"[Ultima-Terra]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 3 },
	{ 438, L"[Silver Dragon-Death]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 439, L"[Nova Dragon-Death]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 420, L"[Deathguise-Death]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 435, L"[Necron-Death]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 496, L"[Necron-Engage]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 2 },
	{ 497, L"[Necron-Teleport]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_GROUP, 2 },
	{ 432, L"[Ozma-Death]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 37,  L"[Lockup]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 39,  L"[Lockup]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 80,  L"[Game Crash]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 84,  L"[Game Crash]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 91,  L"[Game Crash]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 263, L"[Game Crash]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 264, L"[Game Crash]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 426, L"[Game Crash]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 430, L"[Game Crash]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 442, L"[Game Crash]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 },
	{ 444, L"[Game Crash]", SPELL_TARGET_TYPE_ANY, SPELL_TARGET_AMOUNT_ZERO, 3 }
};

//====================================//
//       Spell Animation Sequence     //
//====================================//

struct SpellAnimSequenceCode {
	uint8_t id;
	wstring label;
	wstring help;
	Spell_Animation_Argument_Type arg_type[SPELL_ANIMATION_SEQUENCE_ARG];
};

static SpellAnimSequenceCode SPELLANIM_OPCODE[] = {
	{ 0x00, L"END", L"End of spell animation.\nIt must always be the last code.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_NOTHING, SAAT_NOTHING } }, // Must be the first of the list
	{ 0x01, L"Wait", L"Wait for some fixed time.\n - 1st arg : unknown\n - 2nd arg : time to wait", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x02, L"Play caster animation", L"Play an animation for the caster.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x03, L"0x03", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x04, L"0x04", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x05, L"0x05", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x06, L"0x06", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x07, L"0x07", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x08, L"0x08", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x09, L"0x09", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x0A, L"0x0A", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x0B, L"0x0B", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x0C, L"0x0C", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x0D, L"Change model", L"Change the character's model. Seem to work for the trance abilities only.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x0E, L"0x0E", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x0F, L"0x0F", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x23, L"Camera-related stuff", L"Some stuff about the different camera movements.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x24, L"Show/hide characters", L"Hide or show the characters and their attached models (such as weapons or status sfx).\n - 1st arg : fade time\n - 2nd arg : who and how", { SAAT_INTEGER, SAAT_FADE_INOUT } },
	{ 0x25, L"Effect point", L"Either apply the spell's effect (damage, status, etc...) or display them.\n - 1st arg : which character\n - 2nd arg : which effect", { SAAT_CHARACTER, SAAT_EFFECT } },
	{ 0x27, L"Channel toward target", L"Make the caster face the specified character and play its casting animation.\n - 1st arg : which character\n - 2nd arg : unknown", { SAAT_CHARACTER, SAAT_INTEGER } },
	{ 0x28, L"Put back in sleep mode", L"Make the character (the caster most of the time) face his enemies and play its usual standing animation.\n - 1st arg : which character\n - 2nd arg : unknown", { SAAT_CHARACTER, SAAT_INTEGER } },
	{ 0x29, L"Play camera", L"Play a camera movement.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x2A, L"Set battle scene transparency", L"Fade in or fade out the background scene.\n - 1st arg : alpha (0 hides it totally)\n - 2nd arg : fade time", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x2B, L"Wait for animation", L"Wait until the model's animation ends.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x2C, L"0x2C", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x2D, L"Play sound", L"Play a sound.\n - 1st arg : which sound\n - 2nd arg : unknown", { SAAT_SOUND, SAAT_INTEGER } },
	{ 0x2E, L"0x2E", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_SOUND, SAAT_INTEGER } },
	{ 0x50, L"0x50", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x51, L"Setup destination", L"Setup a destination toward the target for latter use.\n - 1st arg : distance from current position toward the target ?\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x55, L"Play miss sound", L"Play the miss sound of character's attack.\n - 1st arg : which character\n - 2nd arg : unknown", { SAAT_CHARACTER, SAAT_INTEGER } },
	{ 0x57, L"0x57", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x5A, L"Play character animation looping", L"Make a character play an animation by kind and make it loop.\n - 1st arg : which character\n - 2nd arg : kind of animation", { SAAT_CHARACTER, SAAT_ANIMATION } },
	{ 0x5B, L"Play character animation", L"Make a character play an animation by kind.\n - 1st arg : which character\n - 2nd arg : kind of animation", { SAAT_CHARACTER, SAAT_ANIMATION } },
	{ 0x5C, L"0x5C", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x5E, L"0x5E", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x5F, L"0x5F", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x61, L"0x61", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x62, L"Face back to normal", L"Make the character face his enemies.\n - 1st arg : which character\n - 2nd arg : unknown", { SAAT_CHARACTER, SAAT_INTEGER } },
	{ 0x63, L"Play raw animation", L"Make a character play an animation?\n - 1st arg : which character\n - 2nd arg : unknown", { SAAT_CHARACTER, SAAT_INTEGER } },
	{ 0x64, L"0x64", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x65, L"0x65", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x69, L"Move before", L"Instantatly move a character in front of another character.\n - 1st arg : character to move\n - 2nd arg : other character", { SAAT_CHARACTER, SAAT_CHARACTER } },
	{ 0x6A, L"0x6A", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x6B, L"0x6B", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x6C, L"0x6C", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x6D, L"0x6D", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x6E, L"0x6E", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x6F, L"Move caster", L"Smoothly moves the caster to a destination that has been set up.\n - 1st arg : unknown\n - 2nd arg : time to reach destination", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x70, L"0x70", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x71, L"0x71", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x72, L"0x72", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x73, L"0x73", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x79, L"0x79", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x7A, L"Unused 0x7A", L"Unknown effect.\n - 1st arg : some character\n - 2nd arg : unknown", { SAAT_CHARACTER, SAAT_INTEGER } },
	{ 0x7B, L"Unused 0x7B", L"Unknown effect.\n - 1st arg : some character\n - 2nd arg : unknown", { SAAT_CHARACTER, SAAT_INTEGER } },
	{ 0x7C, L"Unused 0x7C", L"Seems to shorten the sequence.\n - 1st arg : some character\n - 2nd arg : unknown", { SAAT_CHARACTER, SAAT_INTEGER } },
	{ 0x7F, L"Unused 0x7F", L"Unknown effect.\n - 1st arg : some character\n - 2nd arg : unknown", { SAAT_CHARACTER, SAAT_INTEGER } },
	{ 0x80, L"Play model on target v1", L"Display a spell model and run its animation.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x81, L"Play model on target v2", L"Display a spell model and run its animation.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x82, L"Play model on target v3", L"Display a spell model and run its animation.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x83, L"Play model on target v4", L"Display a spell model and run its animation.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x84, L"0x84", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x85, L"0x85", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x86, L"0x86", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0x87, L"0x87", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } },
	{ 0xFF, L"Unused code 0xFF", L"Unknown effect.\n - 1st arg : unknown\n - 2nd arg : unknown", { SAAT_INTEGER, SAAT_INTEGER } }
};

static SpellAnimSequenceCode& GetSpellAnimSequenceCode(uint8_t code) {
	for (unsigned int i=0;i<G_N_ELEMENTS(SPELLANIM_OPCODE);i++) {
		if (SPELLANIM_OPCODE[i].id==code)
			return SPELLANIM_OPCODE[i];
	}
	return SPELLANIM_OPCODE[G_N_ELEMENTS(SPELLANIM_OPCODE)-1];
}

struct SpellAnimSequenceArgumentString {
	Spell_Animation_Argument_Type type;
	uint8_t arg;
	wstring label;
};

static SpellAnimSequenceArgumentString SPELLANIM_ARGUMENT_STRING[] = {
	{ SAAT_CHARACTER, 0,	L"1st target" },
	{ SAAT_CHARACTER, 1,	L"2nd target" },
	{ SAAT_CHARACTER, 2,	L"3rd target" },
	{ SAAT_CHARACTER, 3,	L"4th target" },
	{ SAAT_CHARACTER, 4,	L"5th target" },
	{ SAAT_CHARACTER, 5,	L"6th target" },
	{ SAAT_CHARACTER, 6,	L"7th target" },
	{ SAAT_CHARACTER, 7,	L"8th target" },
	{ SAAT_CHARACTER, 0x10,	L"caster" },
	{ SAAT_CHARACTER, 0x11,	L"unknown" },
	{ SAAT_CHARACTER, 0xFF,	L"all targets" },
	{ SAAT_EFFECT,    0,	L"damage point" },
	{ SAAT_EFFECT,    1,	L"figure point" },
	{ SAAT_ANIMATION, 0,	L"stand" },
	{ SAAT_ANIMATION, 1,	L"stand weak" },
	{ SAAT_ANIMATION, 2,	L"hit" },
	{ SAAT_ANIMATION, 3,	L"hit fly" },
	{ SAAT_ANIMATION, 4,	L"stand KO" },
	{ SAAT_ANIMATION, 5,	L"weak -> stand" },
	{ SAAT_ANIMATION, 6,	L"KO -> stand" },
	{ SAAT_ANIMATION, 7,	L"hit hard" },
	{ SAAT_ANIMATION, 8,	L"KO" },
	{ SAAT_ANIMATION, 9,	L"stand ready" },
	{ SAAT_ANIMATION, 10,	L"ready" },
	{ SAAT_ANIMATION, 11,	L"KO -> stand weak" },
	{ SAAT_ANIMATION, 12,	L"defend" },
	{ SAAT_ANIMATION, 13,	L"stand defend" },
	{ SAAT_ANIMATION, 14,	L"defend -> stand" },
	{ SAAT_ANIMATION, 15,	L"???" },
	{ SAAT_ANIMATION, 16,	L"dodge" },
	{ SAAT_ANIMATION, 17,	L"flee" },
	{ SAAT_ANIMATION, 18,	L"victory" },
	{ SAAT_ANIMATION, 19,	L"stand victory" },
	{ SAAT_ANIMATION, 20,	L"run" },
	{ SAAT_ANIMATION, 21,	L"stand run" },
	{ SAAT_ANIMATION, 22,	L"attack 1" },
	{ SAAT_ANIMATION, 23,	L"attack 2" },
	{ SAAT_ANIMATION, 24,	L"jump back 1" },
	{ SAAT_ANIMATION, 25,	L"jump back 2" },
	{ SAAT_ANIMATION, 26,	L"cast" },
	{ SAAT_ANIMATION, 27,	L"stand cast" },
	{ SAAT_ANIMATION, 28,	L"cast -> stand" },
	{ SAAT_ANIMATION, 29,	L"move forward" },
	{ SAAT_ANIMATION, 30,	L"move backward" },
	{ SAAT_ANIMATION, 31,	L"item" },
	{ SAAT_ANIMATION, 32,	L"ready -> stand" },
	{ SAAT_ANIMATION, 33,	L"cast alternate" },
	{ SAAT_FADE_INOUT, 0,	L"show team" },
	{ SAAT_FADE_INOUT, 1,	L"show enemies" },
	{ SAAT_FADE_INOUT, 2,	L"show all" },
	{ SAAT_FADE_INOUT, 3,	L"???" },
	{ SAAT_FADE_INOUT, 4,	L"hide team" },
	{ SAAT_FADE_INOUT, 5,	L"hide enemies" },
	{ SAAT_FADE_INOUT, 6,	L"hide all" },
	{ SAAT_FADE_INOUT, 7,	L"???" },
	{ SAAT_FADE_INOUT, 8,	L"show team but caster" },
	{ SAAT_FADE_INOUT, 9,	L"show caster" },
	{ SAAT_FADE_INOUT, 10,	L"???" },
	{ SAAT_FADE_INOUT, 11,	L"???" },
	{ SAAT_FADE_INOUT, 12,	L"hide team but caster" },
	{ SAAT_FADE_INOUT, 13,	L"hide caster" },
	{ SAAT_FADE_INOUT, 14,	L"???" },
	{ SAAT_FADE_INOUT, 15,	L"???" }
};

//====================================//
//       Enemy Animation Sequence     //
//====================================//

struct EnemySequenceCode {
	uint8_t id;
	wstring label;
	wstring help;
	int arg_amount;
	int* arg_length;
	Enemy_Animation_Argument_Type* arg_type;
};

static EnemySequenceCode ENEMYANIM_OPCODE[] = {
	{ 0x01, L"Wait", L"Wait some time.\n - 1st arg : Time", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x07, L"Wait Animation", L"Wait until the animation is completed.", 0, NULL, NULL },
	{ 0x09, L"Wait Spell Loaded", L"Wait for the set spell animation to be loaded in RAM.", 0, NULL, NULL },
	{ 0x0B, L"Wait Spell Executed", L"Wait until the played spell animation has ended.", 0, NULL, NULL },
	{ 0x02, L"Effect Point", L"Apply the effect.", 0, NULL, NULL },
	{ 0x0E, L"Battle Text", L"Display battle text.\n - 1st arg : Text", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_TEXT } },
	{ 0x21, L"Battle Title", L"Display battle text as title.\n - 1st arg : Text", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_TEXT } },
	{ 0x08, L"Set Spell Animation + Channel", L"Define the next spell animation to run with channelling.\n - 1st arg : Animation\n - 2nd arg : Caster attachement point\n - 3rd arg : ???\n - 4th arg : ???", 4, new int[4]{ 2, 2, 2, 2 }, new Enemy_Animation_Argument_Type[4]{ EAAT_SPELL_ANIM, EAAT_INTEGER, EAAT_INTEGER, EAAT_INTEGER } },
	{ 0x1A, L"Set Spell Animation", L"Define the next spell animation to run.\n - 1st arg : Animation\n - 2nd arg : Caster attachement point\n - 3rd arg : ???\n - 4th arg : ???", 4, new int[4]{ 2, 2, 2, 2 }, new Enemy_Animation_Argument_Type[4]{ EAAT_SPELL_ANIM, EAAT_INTEGER, EAAT_INTEGER, EAAT_INTEGER } },
	{ 0x0A, L"Run Spell Animation", L"Play the spell animation previously set.", 0, NULL, NULL },
	{ 0x06, L"SFX", L"Seems to have various effects (display sfx, apply the effect and display damage...).\n - 1st arg : SFX\n - 2nd arg : Some model bone\n - 3rd arg : Time to wait before running", 3, new int[3]{ 2, 1, 1 }, new Enemy_Animation_Argument_Type[3]{ EAAT_INTEGER, EAAT_INTEGER, EAAT_INTEGER } },
	{ 0x05, L"Play Animation", L"Play enemy animation.\n - 1st arg : animation", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_ANIMATION } },
	{ 0x11, L"Change Stand Animation", L"Define the new standing animation for the caster.\n - 1st arg : Animation", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x14, L"Turn", L"Make the caster turn toward the targets or default's angle or fixed angle.\nAngle unit is 4096 = 360 degrees\n - 1st arg : Base angle and flags\n -- under 32767 : specifies the angle\n -- 32768 : normal angle (0 or 180, facing player or enemy team)\n -- 32769 : toward targets\n -- 32770 : default angle (specified in enemy group)\n - 2nd arg : Offset angle\n - 3rd arg : Time", 3, new int[3]{ 2, 2, 1 }, new Enemy_Animation_Argument_Type[3]{ EAAT_INTEGER, EAAT_INTEGER, EAAT_TIME } },
	{ 0x03, L"Walk Target", L"Make the caster walk toward the target.\n - 1st arg : Time\n - 2nd arg : Distance", 2, new int[2]{ 1, 2 }, new Enemy_Animation_Argument_Type[2]{ EAAT_TIME, EAAT_COORDINATE } },
	{ 0x1E, L"Walk Target Front", L"Make the caster walk in front of the target.\n - 1st arg : Time\n - 2nd arg : Distance Y", 2, new int[2]{ 1, 2 }, new Enemy_Animation_Argument_Type[2]{ EAAT_TIME, EAAT_COORDINATE } },
	{ 0x1B, L"Walk Relative", L"Make the caster walk to relative position.\n - 1st arg : Time\n - 2nd arg : Distance X\n - 3rd arg : Distance Z\n - 4th arg : Distance Y", 4, new int[4]{ 1, 2, 2, 2 }, new Enemy_Animation_Argument_Type[4]{ EAAT_TIME, EAAT_COORDINATE, EAAT_COORDINATE, EAAT_COORDINATE } },
	{ 0x13, L"Walk Absolute", L"Make the caster walk to absolute position.\n - 1st arg : Time\n - 2nd arg : Position X\n - 3rd arg : Position Z\n - 4th arg : Position Y", 4, new int[4]{ 1, 2, 2, 2 }, new Enemy_Animation_Argument_Type[4]{ EAAT_TIME, EAAT_COORDINATE, EAAT_COORDINATE, EAAT_COORDINATE } },
	{ 0x04, L"Return", L"Return to the normal position after walking toward a target.\n - 1st arg : Time", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_TIME } },
	{ 0x0C, L"Resize", L"Resize the caster.\n - 1st arg : ???\n - 2nd arg : Size factor (16 keeps the size)\n - 3rd arg : Time", 3, new int[3]{ 1, 1, 1 }, new Enemy_Animation_Argument_Type[3]{ EAAT_INTEGER, EAAT_INTEGER, EAAT_TIME } },
	{ 0x0D, L"Hide Mesh", L"Hide a part of the caster's model.\n - 1st arg : mesh list (65535 for all)", 1, new int[1]{ 2 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x0F, L"Show Mesh", L"Show a part of the caster's model.\n - 1st arg : mesh list (65535 for all)", 1, new int[1]{ 2 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x1F, L"Enable Shadow", L"Show or hide the caster's shadow.\n - 1st arg : Boolean Show/Hide", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x1D, L"Fade Out", L"Make the caster fade out.\n - 1st arg : Time", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_TIME } },
	{ 0x1C, L"Change Target Bone", L"Change the bone of the target's model affected.\n - 1st arg : Bone", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x10, L"Run Camera", L"Run a camera sequence.\n - 1st arg : Camera sequence", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x20, L"Run Camera Target", L"Run a camera sequence on targets.\n - 1st arg : Camera sequence", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x12, L"Run Camera Target Alternate", L"Run an alternate camera sequence on targets. Unless the spell's \"Alternate Camera\" flag is on, it is skipped in the following situations:\n - randomly 1/2 times\n - if the player's battle camera configuration is set on \"Fixed\"\n - if a target in under Vanish or Mini\n\n - 1st arg : Camera sequence", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x19, L"Play Sound", L"Play a sound.\n - 1st arg : Sound\n - 2nd arg : Delay\n - 3rd arg : ???\n - 4th arg : Volume", 4, new int[4]{ 2, 1, 1, 1 }, new Enemy_Animation_Argument_Type[4]{ EAAT_SOUND, EAAT_INTEGER, EAAT_INTEGER, EAAT_INTEGER } }, // 2nd should be EAAT_TIME but +1 is added to the arg value so the minimal value is 0 instead of 1
	{ 0x15, L"Play Texture Animation", L"Play a texture animation on caster's model.\n - 1st arg : Texture animation", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x16, L"Play Texture Animation Once", L"Play a texture animation on caster's model once.\n - 1st arg : Texture animation", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x17, L"Stop Texture Animation", L"Stop playing a texture animation.\n - 1st arg : Texture animation", 1, new int[1]{ 1 }, new Enemy_Animation_Argument_Type[1]{ EAAT_INTEGER } },
	{ 0x18, L"Fast End", L"Somehow fasten the ending of the spell sequence.", 0, NULL, NULL },
	{ 0x00, L"END", L"Terminate animation sequence.", 0, NULL, NULL }
};

static EnemySequenceCode& GetEnemySequenceCode(uint8_t code) {
	for (unsigned int i=0;i<G_N_ELEMENTS(ENEMYANIM_OPCODE);i++) {
		if (ENEMYANIM_OPCODE[i].id==code)
			return ENEMYANIM_OPCODE[i];
	}
	return ENEMYANIM_OPCODE[0];
}

#endif
